import enums from '@/common/sysEnum.js';
import conf  from '@/common/config.js'
var Fly = require("flyio/dist/npm/wx"); //请求拦截器
var fly = new Fly;

//添加请求拦截器
fly.interceptors.request.use((request) => {
	try {
		var sessionKey = uni.getStorageSync(enums.enums.USER.SESSION_KEY); // 获取本地缓存的seeesionKey
		request.headers["Authorization"] = 'SessionKey ' + sessionKey;
		request.headers["content-Type"] = 'application/json';
		//登陆sessionKey判断，存在并判断是否失败，不存在及失败跳转到小程序登陆界面
		if (!sessionKey || sessionKey === '') {
			uni.showToast({
						title: '请您先登陆系统！',
							duration: 2000,
							success: () => {
								setTimeout(function () {
				       		wx.login() //登录
							  }, 2000);
							}
					});
		} else { //如果存在就判断SessionKey是否失效
			return new Promise((resolve, reject) => { //因wx.checkSession为异步方法 通过Promise来处理
				wx.checkSession({
					success: function() { //session_key 未过期，并且在本生命周期一直有效
						resolve(request); //返回拦截请求
					},
					fail: function() {
						// session_key 已经失效，需要重新执行登录流程
						uni.showToast({
							title: '登陆超时，请重新登陆！',
							duration: 2000,
							success: () => {
								setTimeout(function() {
									wx.login() //登录
								}, 2000);
							}
						});
					}
				})
			})
		}
	} catch (e) {
		uni.showToast({
			title: '获取用户名异常!',
			duration: 2000
		});
	}
})

//添加响应拦截器，响应拦截器会在then/catch处理之前执行
fly.interceptors.response.use(
	(response) => {
		//只将请求结果的data字段返回
		return response.data
	},
	(err) => {
		//发生网络错误后会走到这里
		return Promise.resolve("请求接口错误！")
	}
)

//封装了一下方法，提供默认的获取数据及错误提示
function httpRequest(url, params, method, loading) {
	if (loading) {
		uni.showLoading({			
			title: '拼命加载中',
			mask: true
		});
	}
	var urlConcat = conf.conf.API_ROOT + url; //请求地址的拼接
	return new Promise((resolve, reject) => { //通过Promise调用fly方法
		fly.request(urlConcat, params, {
				method: method,
				timeout: 20000 //超时设置为30s
			})
			.then(data => {
				if (loading) {
					setTimeout(function() {
						uni.hideLoading();
					}, 300);
				}
				uni.stopPullDownRefresh();
				if (data.code == 200) { //返回200 表示请求成功
					//请求成功返回数据
					resolve(data);
				} else {
					uni.showToast({
						title: data.message, //返回请求错误弹出框消息
						icon: 'none',
						duration: 2000
					});
				}
			})
			.catch((e) => {
				if (loading) {
					setTimeout(function() {
						uni.hideLoading();
					}, 300);
				}
				uni.stopPullDownRefresh();
				uni.showToast({
					icon: 'none',
					title: '异常:请求接口失败!',
					duration: 2000
				});
			});
	});
}


/**
 * UNI网路请求
 */
function httpUNIReques(url,data,method,sessionKey){
	let urlConcat=conf.conf.API_ROOT+url;
	return new Promise((res) => {
	    uni.request({
            url: urlConcat,
            data: data,
            method: method,
            header: {
                     'Content-Type': 'application/json',
		                  'Authorization': "SessionKey " + sessionKey
                    },
            dataType: 'json',
            success: (result) => {
            	res(result)
            },
            fail: (e) => {
            	res(e)
            }   
        })
	 })
}
module.exports = {
	httpUNIReques: httpUNIReques,
	httpRequest: httpRequest
}